Distributed systems are often characterized by components enabled to interact with each other in order to accomplish system tasks, such that one job or program is executed by more than one computer. In distributed systems, components of networked computers communicate and coordinate events by passing messages. However, distributed systems do not have a global clock that accurately provides a time to every networked machine. Further, distributed systems often experience independent failure of individual components within the system.